Traditionally, when building distributed or clustered computer systems, various responsibilities are usually assigned to particular servers (nodes). This association is usually static, meaning that from that point on, the designated server will perform those responsibilities until it is shut down, crashes or is relieved of its responsibilities. For example, one server in the cluster may be designated to be a mail server which performs electronic mail responsibilities for the members of that cluster. If that server were to fail or crash, the responsibilities assigned to that server would disappear from the cluster unless some logic were implemented to recover or failover those responsibilities to another server. As a result, today there exist a large number of failover techniques that have been implemented for use in distributed systems to deal with such crashes and failures.
Static assignment of responsibilities to specific machines can be problematic in certain contexts. For example, in dynamic systems where servers are frequently added or removed from the cluster, it can be difficult to maintain static association of tasks to particular server nodes. For example, in the cloud computing context, servers are added dynamically when demand increases and removed when demand decreases. In many cases, this can create problems when trying to assign functions among the existing members of the cluster.
The various responsibilities mentioned above usually take the form of a software program or application. Almost invariably, applications require access to data that can be stored in a database or in a cache for faster access. Today, clustered caches are being used to store data for various applications on the network. In most instances, when an application requires a data entry, it first retrieves that data from the distributed cache, performs some processing involving that data and then writes/updates the data entry back to the cache.